﻿//////////////////////////////////////////////////////////////////////////////
//
//  Copyright © 1998-2024 Glodon Company Limited.  All rights reserved.
//
//  Use of this software is subject to the terms of the Glodon license
//  agreement provided at the time of installation or download, or which
//  otherwise accompanies this software in either electronic or hard copy form.  
//
//////////////////////////////////////////////////////////////////////////////

// Reviewed

#pragma once

#include "GcmpModelInterface.h"

namespace gcmp {

    class IElementViewSpecificShapeComponent;
    class IElement;

    /// \brief Element视图相关行为工具类
    class GCMP_MODEL_INTERFACE_EXPORT ElementViewSpecificShapeComponentUtils
    {
    public:
        /// \brief 创建Instance视图相关行为
        /// 
        /// 创建得到的视图相关行为接口的行为如下：
        /// 1、IsVisibleInModelView：返回所属Element的可见性，即 GetOwnerElement()->IsVisible()
        /// 2、CreateViewSpecificElementShape：返回nullptr，框架随即会采用 ModelShape
        /// 3、IsCuttableByModelViewRange：返回true
        ///
        /// \return  InstanceViewSpecificShapeComponent 对象
        static OwnerPtr<IElementViewSpecificShapeComponent> CreateInstanceViewSpecificShapeComponent();

        /// \brief 创建填充区域视图相关组件 
        ///
        /// 创建得到的视图组件相关接口的行为如下：
        /// 1、IsVisibleInModelView：返回所属Element的可见性
        /// 2、CreateViewSpecificElementShape：在视图下可见则返回视图 Grep ，否则返回nullptr
        /// 3、IsCuttableByModelViewRange：返回false
        ///
        /// \return GCMP 内部默认的填充区域视图相关组件实例
        static OwnerPtr<IElementViewSpecificShapeComponent> CreateFilledRegionDefaultViewSpecificShapeComponent();

        /// \brief 创建遮罩区域视图相关组件 
        ///
        /// 创建得到的视图组件相关接口的行为如下：
        /// 1、IsVisibleInModelView：返回所属Element的可见性
        /// 2、CreateViewSpecificElementShape：在视图下可见则返回视图 Grep ，否则返回nullptr
        /// 3、IsCuttableByModelViewRange：返回false
        ///
        /// \return GCMP 内部默认的遮罩区域视图相关组件实例
        static OwnerPtr<IElementViewSpecificShapeComponent> CreateMaskingRegionDefaultViewSpecificShapeComponent();
                
        /// \brief 创建富文字视图相关组件 
        ///
        /// 创建得到的视图组件相关接口的行为如下：
        /// 1、IsVisibleInModelView：返回所属Element的可见性
        /// 2、CreateViewSpecificElementShape：在视图下可见则返回视图 Grep ，否则返回nullptr
        /// 3、IsCuttableByModelViewRange：返回false
        ///
        /// \return  GCMP 内部默认的富文本视图相关组件实例 
        static OwnerPtr<IElementViewSpecificShapeComponent> CreateDrawingAnnotationTextDefaultViewSpecificShapeComponent();
    };

}// namespace gcmp


